#pragma once

#include <sstream>
#include "TinyJsonValue.h"
#include "public.h"

namespace tinyjson
{
    class TinyJsonWriter
    {
    private:
        TinyJsonValuePtr m_value = nullptr;
        Boolean m_isStringified = false;
        std::shared_ptr<std::ostringstream> m_output = nullptr;

    public:
        TinyJsonWriter() {}
        ~TinyJsonWriter() {}
        void stringify();
        void stringify_value(std::ostream &output, const TinyJsonValue &value);
        void stringify_string(std::ostream &output, const String &src);
        void stringify_array(std::ostream &output, const Array &array);
        void stringify_object(std::ostream &output, const Object &object);
        String stringify_result();
        void push(const TinyJsonValue &val);
        void write(const char *filepath);
    };
}